#include "graph.h"
#include<bits/stdc++.h>
using namespace std;
const int N=205,INF=0x3f3f3f3f;
int g[N][N],cnt,ans[N],node,fa[N],idx[N];
void Find(int u){
	if(Color()==3){
		node=u;
		return;
	}
	if(fa[u]!=-1){
		Move(idx[u],Color());
		const int I=LastRoad();
		Find(fa[u]);
		Move(I,Color());
	}
}
void DFS(int u){
	const int du=NumberOfRoads();
	for(int i=0;i<du;++i){
		Move(i+1,2);
		if(Color()==1){
			g[u][cnt]=1;
			g[cnt][u]=1;
			const int I=LastRoad();
			fa[cnt]=u;
			idx[cnt]=I;
			DFS(cnt++);
			Move(I,Color());
		}else{
			Move(LastRoad(),3);
			node=-1;
			Find(u);
			if(node!=-1){
				g[u][node]=1;
				g[node][u]=1;
			}
			Move(i+1,2);
			Move(LastRoad(),2);
		}
	}
}
void Inspect(int R){
	memset(g,0x3f,sizeof(g));
	cnt=1;
	fa[0]=-1;
	idx[0]=-1;
	DFS(0);
	for(int i=0;i<N;++i) g[i][i]=0;
	for(int k=0;k<N;++k){
		for(int i=0;i<N;++i){
			for(int j=0;j<N;++j) g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
		}
	}
	memset(ans,0,sizeof(ans));
	for(int i=0;i<N;++i){
		for(int j=i+1;j<N;++j){
			if(g[i][j]!=INF) ++ans[g[i][j]];
		}
	}
	for(int i=1;i<=R;++i) Answer(i,ans[i]);
}
